// /**
//  * @Description: 节流函数
//  * 节流原理：在一定时间内，只能触发一次
//  * @Author: Zander
//  * @Date: 2023/1/29 10:45
//  * @LastEditors: Zander
//  * @LastEditTime: 2023/1/29 10:45
//  * @param {Function} func 要执行的回调函数
//  * @param {Number} wait 延时的时间
//  * @param {Boolean} trailing 是否立即执行
//  * @param {Boolean} leading 是否立即执行
//  */
// function throttle(func, wait = 500, trailing = false, leading = true) {
//   let timeout, context, args, result, last = 0;
//
//   function later() {
//     last = !leading ? 0 : new Date().getTime();
//     timeout = null;
//     result = func.apply(context, args);
//     if (!timeout) context = args = null;
//   }
//
//   const throttled = function() {
//     const _now = new Date().getTime();
//     if (!last && !leading) last = _now;
//     context = this;
//     args = arguments;
//     if (_now - last > wait) {
//       if (timeout) {
//         clearTimeout(timeout);
//         timeout = null;
//       }
//       last = _now;
//       result = func.apply(context, args);
//       if (!timeout) context = args = null;
//     } else if (!timeout && trailing) {
//       timeout = setTimeout(later, wait);
//     }
//
//     return result;
//   };
//
//   throttled.cancel = function() {
//     if (timeout) {
//       clearTimeout(timeout);
//       last = 0;
//       timeout = context = args = null;
//     }
//   };
//
//   return throttled();
// }
//
// throttle.throttle = throttle;
//
// module.exports = throttle;

let flag;
/**
 * 节流原理：在一定时间内，只能触发一次
 *
 * @param {Function} func 要执行的回调函数
 * @param {Number} wait 延时的时间
 * @param {Boolean} immediate 是否立即执行
 * @return null
 */
function throttle(func, wait = 500, immediate = true) {
  if (immediate) {
    if (!flag) {
      flag = true
      // 如果是立即执行，则在wait毫秒内开始时执行
      typeof func === 'function' && func()
      setTimeout(() => {
        flag = false
      }, wait)
    }
  } else if (!flag) {
    flag = true
    // 如果是非立即执行，则在wait毫秒内的结束处执行
    setTimeout(() => {
      flag = false
      typeof func === 'function' && func()
    }, wait)
  }
}

throttle.throttle = throttle;

module.exports = throttle;
